#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMouseEventTransition>
#include <QMouseEvent>
#include <QPoint>
#include <QGraphicsDropShadowEffect>
#include <btform.h>
#include <QRect>
#include <QCoreApplication>
#include <QDir>
#include <QJsonArray>
#include <QJsonObject>
#include <cstdlib>
#include <ctime>
#include <volumetool.h>
#include "musiclist.h"
#include <QFileDialog>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include "commonpage.h"
#include <QImage>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void initUI();
    void conncetSignalAndSlot();
    void initPlayer();
    void playAllMusicOfCommonPage(CommonPage*page,int index);

    void updateBtformAnima();



public slots:
    //定义一个槽函数，当一个左侧按钮被点击时，清除其他左侧按钮的效果
    void onBtFromClicked(int id);
    void onUpdateLikeMusic(bool isLike,QString musicId);
    void on_quit_clicked();
    //加载图片路径和名字到Josn结构中
    QJsonArray RandomPicture();
    void on_volume_clicked();

    void on_addLocal_clicked();

    void onPlayAll(PageType pageType);

    void onPlayMusic();

    //捕捉音乐播放变化的信号
    void onPlayStateChanged();

    void onPlayUpClicked();//上一曲
    void onPlayDownClicked();//下一曲

    void onPlaybackModeClicked();//改变音乐播放顺序
    void onPlaybackModeChanged(QMediaPlaylist::PlaybackMode playbackMode);//捕捉音乐模式改变信息，改变播放模式图标

    //捕获commonPage发射的信号，播放音乐
    void playMusicByIndex(CommonPage* page,int index);

    //捕获音乐切换的信息
    void onCurrentIndexChanged(int index);

    //捕捉静音信号
    void setMusicSilence(bool isMuted);

    //捕捉音量改变的信号
    void setMusicVolume(int volume);

    //捕捉媒体的总时长改变的信号
    void onDurationChanged(qint64 duration);

    //捕捉媒体播放时持续改变当前播放时长的信号
    void onPositionChanged(qint64 duration);

    //捕捉滑动条的变化
    void onMusicSliderChanged(float value);

    //捕捉歌曲改变的信息，然后更新下方信息
    void onMetaDataAvailableChanged(bool available);

protected:

    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void defaultRec();


private:
    Ui::Widget *ui;
    QPoint dragPosition;//鼠标与窗口的相对距离
    VolumeTool* volumeTool;
    MusicList musiclist;

    //播放器相关
    QMediaPlayer* player;

    QMediaPlaylist* playList;//设置媒体播放列表

    CommonPage* currentPage;//记录当前正在播放的commonpage页面

    int currentIndex;//记录正在播放的歌曲在媒体列表的索引

    qint64 totalDuration;

};
#endif // WIDGET_H
